---
title: "Dashboard Ciencia de Datos Reto 2"
author: "Arnau Bertran"
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
social: menu
source_code: embed
---
```{r setup, include=FALSE}
library(flexdashboard)
library(tidyverse)
library(maps)
library(DT)
library(lorem)
```
```{r}
datos <- read.csv('datos_depurados.csv')
```
Gráficos {data-icon="fa-signal"}
=======================================================================
Column {data-width=550}
-----------------------------------------------------------------------
### Relación consumo notícias televisión y confianza en la gente
```{r}
correlation <- cor(datos$tvpol, datos$ppltrst)
ggplot(datos, aes(x = ppltrst, fill = factor(tvpol))) +
geom_density(alpha = 0.6) +
labs(x = "Confianza en la gente (ppltrst)",
y = "Densidad",
fill = "Tiempo de noticias en TV (tvpol)") +
theme_minimal() +
theme(
legend.title = element_text(size = 8), # Tamaño del título de la leyenda
legend.text = element_text(size = 7), # Tamaño del texto de la leyenda
legend.key.size = unit(0.6, "cm") # Tamaño de las claves de la leyenda
)
model <- lm(ppltrst ~ tvpol, data = datos)
```
Column {data-width=450}
-----------------------------------------------------------------------
### Notícias en la televisión por país
```{r}
# Instalar y cargar las librerías necesarias
install.packages("dplyr")
install.packages("ggplot2")
install.packages("maps")
library(dplyr)
library(ggplot2)
library(maps)
# Calcular la media de tvpol por país
avg_time_per_country <- datos %>%
group_by(cntry) %>%
summarise(mean_tvpol = mean(tvpol, na.rm = TRUE)) %>%
arrange(desc(mean_tvpol))
# Mapeo manual de códigos de país a nombres completos
country_mapping <- c(
"AL" = "Albania",
"AT" = "Austria",
"BE" = "Belgium",
"BG" = "Bulgaria",
"CH" = "Switzerland",
"CY" = "Cyprus",
"CZ" = "Czechia",
"DE" = "Germany",
"DK" = "Denmark",
"EE" = "Estonia",
"ES" = "Spain",
"FI" = "Finland",
"FR" = "France",
"GB" = "United Kingdom",
"GE" = "Georgia",
"GR" = "Greece",
"HR" = "Croatia",
"HU" = "Hungary",
"IE" = "Ireland",
"IS" = "Iceland",
"IL" = "Israel",
"IT" = "Italy",
"LT" = "Lithuania",
"LU" = "Luxembourg",
"LV" = "Latvia",
"ME" = "Montenegro",
"MK" = "North Macedonia",
"NL" = "Netherlands",
"NO" = "Norway",
"PL" = "Poland",
"PT" = "Portugal",
"RO" = "Romania",
"RS" = "Serbia",
"RU" = "Russian Federation",
"SE" = "Sweden",
"SI" = "Slovenia",
"SK" = "Slovakia",
"TR" = "Turkey",
"UA" = "Ukraine",
"XK" = "Kosovo"
)
# Renombrar los códigos de país a nombres completos
avg_time_per_country$cntry <- recode(avg_time_per_country$cntry, !!!country_mapping)
# Obtener los datos del mapa mundial
world_map <- map_data("world")
# Renombrar la columna `region` para que coincida con los nombres de los países en `avg_time_per_country`
colnames(world_map)[which(names(world_map) == "region")] <- "cntry"
# Combinar los datos del mapa con los datos de `tvpol`
map_data <- left_join(world_map, avg_time_per_country, by = "cntry")
# Crear el gráfico del mapa
ggplot(map_data, aes(x = long, y = lat, group = group, fill = mean_tvpol)) +
geom_polygon(color = "black") +
scale_fill_gradient(low = "lightblue", high = "darkblue", na.value = "grey50") +
labs(fill = "Media de tvpol") +
theme_void() +
theme(legend.position = "right")
```
### Notícias en la televisión Gran Bretaña
```{r}
ggplot(data = datos[datos$cntry == "GB", ],
aes(x = factor(tvpol, levels = 0:7, labels = c("Nada", "30 min", "30-60 min", "60-90 min", "90-120 min", "120-150 min", "150-180 min", "Más de 180 min")),
fill = factor(tvpol, levels = 0:7, labels = c("Nada", "30 min", "30-60 min", "60-90 min", "90-120 min", "120-150 min", "150-180 min", "Más de 180 min")))) +
geom_bar(color = "black", alpha = 0.7) +
scale_fill_brewer(palette = "Blues") +
labs(x = "Categorías de tiempo viendo noticias",
y = "Frecuencia",
fill = "Tiempo de noticias en TV") + # Etiqueta para la leyenda
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1), # Muestra etiquetas del eje x
axis.title.x = element_text(size = 12), # Tamaño del título del eje x
axis.title.y = element_text(size = 12), # Tamaño del título del eje y
legend.title = element_text(size = 10), # Tamaño del título de la leyenda
legend.text = element_text(size = 8) # Tamaño del texto de la leyenda
)
```
Tablas {data-icon="fa-table"}
=======================================================================
```{r}
datatable(datos,
caption = 'Datos Media and Social Trust',
rownames = T,
filter = 'top',
options = list(pageLength = 25))
```